home *** CD-ROM | disk | FTP | other *** search
- ;unsigned short char_count(strg,character);
- ; unsigned char *strg,character;
-
- EXTRN _memory_model:byte
-
- _TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_TEXT
- PUBLIC _char_count
- _char_count proc near
- push bp ;
- mov bp,sp ;set up stack frame
- push si ;
- push ds ;
- cmp _memory_model,0 ;near or far?
- jle begin ;jump if near
- inc bp ;else add 2 to BP
- inc bp ;
- begin: cmp _memory_model,2 ;data near or far?
- jb L0 ;jump if near
- lds si,dword ptr [bp+4] ;point DS:SI to string
- inc bp ;add 2 to BP since dword ptr
- inc bp ;
- jmp short L00 ;
- L0: mov si,[bp+4] ;
- L00: sub bx,bx ;BX counts chars
- mov cx,bx ;clear CX
- mov al,[bp+6] ;search char
- cmp byte ptr[si],0 ;test for null string
- je L3 ;
- L1: mov dl,[si] ;get the character
- cmp dl,0 ;test for end of string
- je L3 ;
- cmp dl,al ;
- jne L2 ;jmp if not the char
- inc bl ;else, increment the ctr
- L2: inc si ;inc ptr for next time
- jmp short L1 ;loop
- L3: mov ax,bx ;set result for return
- pop ds ;
- pop si ;
- pop bp ;restore BP
- cmp _memory_model,0 ;quit
- jle quit ;
- db 0CBh ;RET far
- quit: ret ;RET near
- _char_count ENDP
- _TEXT ENDS
- END